module bin_2_bcd(
    input wire [13:0] data_bin,    // 输入 14 位二进制数
    output reg [15:0] data_bcd     // 输出 4 位 BCD（共 16 位，4 位 × 4 个数字）
);

    reg [32:0] z;
    integer i; 

    always @(*) begin
        // 初始化所有位为 0
        for (i = 0; i <= 32; i = i + 1)
            z[i] = 1'b0;

        // 把输入二进制数对齐到 z 的中间
        z[16:3] = data_bin;

        // Double Dabble 算法进行 BCD 转换
        repeat (11) begin
            if (z[17:14] > 4) z[17:14] = z[17:14] + 3;
            if (z[21:18] > 4) z[21:18] = z[21:18] + 3;
            if (z[25:22] > 4) z[25:22] = z[25:22] + 3;
            if (z[29:26] > 4) z[29:26] = z[29:26] + 3;
            z = z << 1;
        end

        // 输出 BCD 编码
        data_bcd = z[29:14];
    end

endmodule
